home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
areuh.tar
/
areuh
/
doc
/
areuh.doc
next >
Wrap
Text File
|
1990-10-10
|
10KB
|
364 lines
ASSEMBLEUR / EDITEUR DE LIENS
POUR LE HP71
I - PRINCIPE
A: Presentation
Le systeme de developpement pour HP71 que nous
presentons ici est base sur un assembleur et un
editeur de liens ecrits en Langage C.
Ce systeme fonctionne a l'heure actuelle sur des
ordinateurs differents :
- Les ordinateurs fonctionnant sous systeme HP-UX
en particulier, et sous systeme Unix en general.
- les ordinateurs Atari 520 et 1040 ST sous
systeme d'exploitation TOS.
- une adaptation est en cours pour l'ordinateur HP
Vectra et autres IBM PC sous systeme MS-DOS.
Tous nos efforts se sont portes vers la reduction
des temps d'assemblage. Voir les temps
d'execution donnes en exemple pour plus de
details.
B: Introduction a l'assembleur
L'assembleur a deux modes de fonctionnement :
Le mode "assemblage complet", qui permet d'avoir
la compatibilite avec le "machin" (l'assembleur du
module Forth). En particulier, toutes les
macro-operations de generation de fichiers lex ou
bin sont supportees.
Le mode "assemblage separe" permet de se
rapprocher des conditions de travail de l'equipe
de developpement du HP71 aux laboratoires de
Corvallis (OR 97330) en autorisant l'assemblage de
modules separes, et leur reunion en seul fichier
par l'intermediaire de l'editeur de liens.
C: Avantages et inconvenients
Parmi les nombreux avantages que procure ce
systeme, nous pouvons citer :
Utilisation des points d'entree HP sans avoir a
les declarer explicitement par une operation du
type EQU.
Edition d'une table des references croisees
donnant pour chaque symbole le nom, la valeur, la
ligne ou il est declare et les lignes ou il est
utilise.
Introduction de nouveaux operateurs dans les
expressions, et possibilite d'introduire des
valeurs en binaire.
Les noms des labels sont maintenant significatifs
sur 12 caracteres.
Quant aux inconvenients, il manque les
pseudo-operations FORTH, WORD et WORDI. Et, bien
sur, il faut un "gros" ordinateur.
D: Principe de l'assemblage separe
L'assemblage d'un fichier en modules separes se
fait en deux phases.
IL faut d'abord assembler tous les fichiers
(modules) constituant le source. Ensuite, il faut
proceder a l'edition de liens, qui rassemble ces
modules en un seul fichier.
Si il s'avere necessaire de modifier une partie du
texte source, il suffit seulement de re-assembler
le module contenant ce texte, et de refaire
l'edition de liens. Le gain de temps est enorme.
Cette gestion modulaire permet egalement un
traitement plus efficace des labels. Un module
peut appeler une routine ecrite dans un autre
module a partir du moment ou le label est precede
d'un signe '=' dans les modules concernes. Ceci a
pour role de declarer le label externe (dans le
module appelant) ou public (dans le module ou le
label est declare) et accessible a tous. Ce sont
les labels globaux.
A cette categorie s'ajoute celle des labels
locaux. Ils ne comportent pas de signe '=', et des
modules peuvent avoir des labels portant le meme
nom. Ceci permet d'avoir, par exemple, plusieurs
labels "argerr" dans des modules differents, sans
causer le moindre conflit.
C'est le meme systeme que celui employe par HP, et
decrit dans les IDS Vol. I (ch. 16). Seul ce
systeme permet le developpement de grands
programmes en assembleur.
II - DIFFERENCES AVEC LE "MACHIN"
A: Selection du mode
La selection du mode d'assemblage (complet ou
separe) est faite par la presence de la macro LEX
ou BIN en premiere ligne du fichier source.
B: Majuscules / Minuscules
Mis a part les labels, tous les op-codes et toutes
les expressions sont compris aussi bien en
majuscules qu'en minuscules.
C: Macro-operation interdites
En assemblage separe, les pseudo-operations de
generation de fichiers LEX ou BIN sont interdites.
Ainsi, LEX, ID, MSG, POLL, ENTRY, CHAR, TOKEN,
KEY, ENDTXT, BIN et CHAIN sont interdites hors
d'un assemblage complet. On exerce ainsi un
controle plus precis sur la generation du code.
Par ailleurs, les macro FORTH, WORD et WORDI sont
interdites.
Seule la premiere utilisation de TITLE est prise
en compte.
D: Macro-operations ajoutees
En premier lieu, il y a RDSYMB (ReaD SYMBols).
Elle permet de charger un fichier contenant des
points d'entree sans avoir a attendre l'edition de
liens. Par exemple, en assemblage complet, ceci
permet d'avoir les points d'entree supportes par
HP (fichier "hp71.ep"). La syntaxe est :
RDSYMB <fichier>
Ensuite, nous avons l'assemblage conditionnel.
Par exemple, si nous avons :
AREUH EQU 1
IF AREUH
P=P+1
RTN
ELSE
ASRB
C+P+1
ENDIF
Seul le code P=P+1 et RTN sera assemble.
Inversement, si AREUH avait ete declare avec une
valeur nulle, le code ASRB et C+P+1 aurait ete
assemble. Ceci permet de gerer simplement des
versions differents d'un meme programme (versions
de mise au point). Attention cependant : il ne
peut y avoir imbrication d'une telle structure
conditionnelle.
E: Opcodes ajoutes
D0=HEX et D1=HEX (presents, mais non documentes
dans le "machin") fonctionnent a merveille.
LC(6) et CON(6) (utilises par HP) sont presents.
F: Valeurs numeriques
Les valeurs numeriques calculees dans les
expressions, ou renvoyees par des labels
comportent six chiffres hexadecimaux et non cinq
comme dans le "machin". Comme dans les IDS.
En revanche, les valeurs affichees dans les tables
de symboles le sont sur cinq chiffres seulement.
Cette limitation ne concerne que l'affichage et
non le stockage interne. Ceci est conforme a
l'affichage fourni par l'assembleur des IDS, et a
ete conserve en raison de l'habitude acquise a la
lecture des adresses du HP71.
G: Les Expressions
Les expressions peuvent contenir des labels, la
valeur du compteur ordinal (PC), des constantes et
des operateurs. Il n'y a pas de limitation du
niveau d'imbrication des parentheses.
Maintenant, les labels sont significatifs sur 12
caracteres.
Le symbole '*' (en position d'operande) est
considere comme la valeur du compteur ordinal.
Dans le cas d'une compilation separee, cette
valeur est la valeur reelle, tenant compte de la
position du module dans le fichier complet.
Les constantes de valeur superieure a six chiffres
hexadecimaux sont tronquees.
Les constantes Ascii sont delimitees soit par des
apostrophes ('), soit par des anti-slash (\).
Un nouveau type de constante est ajoutee : les
constantes binaires. Elles doivent etre precedees
d'un signe '%', comme dans : %01110001
Les operateurs : nous en donnons la liste
complete, par ordre de priorite decroissante. Les
operateurs de meme priorite sont evalues de gauche
a droite.
~ (*256+) ^ (puissance)
- (moins unaire) ` (complement a 1)
& (et logique) ! (ou logique)
* (multiplication) / (division entiere)
+ (addition) - (soustraction)
H: FiLeNd
Le label FiLeNd est ajoute systematiquement a la
fin de chaque fichier ou module assemble.
En outre, le label global "=FiLeNd" est ajoute
automatiquement en fin de fichier lors de
l'edition de liens pour l'assemblage separe.
III - MODE D'EMPLOI DES PROGRAMMES
Les deux programmes "aas" et "ald" admettent les
memes options.
-o
Specifie le nom du fichier resultant de
l'assemblage ou de l'edition de liens.
-a <fichier>
Demande l'impression d'un listing d'assemblage ou
d'edition de liens. Le listing est envoye dans le
fichier specifie.
-A
Demande l'impression d'un listing d'assemblage ou
d'edition de liens. Le listing est envoye a
l'affichage (ou stdout sur les systemes Unix).
-l <longueur de page>
Specifie la longueur physique des pages, en nombre
de lignes. La longueur du texte sera inferieure
de 6 lignes.
-x
Demande l'impression d'une table des references
croisees.
-p
Active la saisie interactive des options decrites
precedemment. Notons que ne donner aucun
parametre active implicitement cette option.
Pour aas, il faut ensuite fournir le nom du
fichier source.
Pour ald, il faut fournir les noms de tous les
modules.
Par defaut, le fichier genere a pour nom "lex".
Les fichiers source ont ".as" comme suffixe
(extension), et les fichiers intermediaires (entre
l'assembleur et l'editeur de liens) ont ".ao"
comme suffixe. En general, il n'est pas
necessaire d'indiquer ces extensions.
IV - EXEMPLES
Assembler le fichier f1.as (qui commence par une
macro LEX), et fichier assemble dans "lex" :
aas f1
Assembler le fichier f1.as avec listing,
references croisees dans le fichier "list", et
fichier resultat dans "lex" :
aas -xalist f1
aas -x -a list f1
Meme exemple que precedemment avec une longueur de
page de 66 lignes (papier 11") :
aas -xalist -l66 f1
Assembler le fichier f1.as, avec resultat dans
"toto", avec parametrage interactif :
aas
puis entrer "f1"
puis entrer "toto"
puis entrer [RETURN]
Les fichiers f1.as, f2.as et f3.as continennent le
source d'un fichier lex.
Assemblage des trois fichiers :
aas f1
aas f2
aas f3
Edition de liens des fichiers f1, f2 et f3 (fi.ao
pour i=1..3), avec demande d'un listing et d'une
table des references croisees dans le fichier
"list", et fichier assemble nomme "totolex".
ald -xalist -ototolex f1 f2 f3
Pierre David (PC37, SIG1, CHHU616)
Janick Taillandier (PC246, SIG6, CHHU178)